import { getDicts } from '@/api/dict/data'

// 字典数据缓存
const dictCache = {}

/**
 * 获取字典数据
 * @param {string} dictType 字典类型
 * @returns {Promise} 返回字典数据Promise
 */
export function getDictData(dictType) {
  return new Promise((resolve, reject) => {
    // 如果缓存中已有数据，直接返回
    if (dictCache[dictType]) {
      resolve(dictCache[dictType])
      return
    }
    
    // 否则从服务器获取
    getDicts(dictType).then(res => {
      // 确保正确处理后端返回的数据
      let dictData = [];
      if (res.code === 200) {
        dictData = res.data || [];
      } else if (Array.isArray(res)) {
        dictData = res;
      } else if (res.data && Array.isArray(res.data)) {
        dictData = res.data;
      }
      
      // 缓存数据
      dictCache[dictType] = dictData;
      resolve(dictData);
    }).catch(error => {
      console.error('获取字典数据失败:', error);
      // 在开发阶段，可以提供一些模拟数据以便测试
      const mockData = getMockDictData(dictType);
      if (mockData.length > 0) {
        dictCache[dictType] = mockData;
        resolve(mockData);
        return;
      }
      reject(error);
    });
    
    // 添加一个获取模拟数据的函数，用于开发测试
    function getMockDictData(dictType) {
      const mockDict = {
        'sys_gender': [
          { dictLabel: '男', dictValue: '0' },
          { dictLabel: '女', dictValue: '1' }
        ],
        'sys_marital_status': [
          { dictLabel: '未婚', dictValue: '0' },
          { dictLabel: '离异', dictValue: '1' },
          { dictLabel: '丧偶', dictValue: '2' }
        ],
        'sys_education': [
          { dictLabel: '高中及以下', dictValue: '0' },
          { dictLabel: '大专', dictValue: '1' },
          { dictLabel: '本科', dictValue: '2' },
          { dictLabel: '硕士', dictValue: '3' },
          { dictLabel: '博士及以上', dictValue: '4' }
        ],
        'sys_house_status': [
          { dictLabel: '已购房无贷款', dictValue: '0' },
          { dictLabel: '已购房有贷款', dictValue: '1' },
          { dictLabel: '与父母同住', dictValue: '2' },
          { dictLabel: '租房', dictValue: '3' },
          { dictLabel: '其他', dictValue: '4' }
        ],
        'sys_car_status': [
          { dictLabel: '已购车无贷款', dictValue: '0' },
          { dictLabel: '已购车有贷款', dictValue: '1' },
          { dictLabel: '无车', dictValue: '2' },
          { dictLabel: '其他', dictValue: '3' }
        ],
        'sys_smoking_status': [
          { dictLabel: '不吸烟', dictValue: '0' },
          { dictLabel: '偶尔吸烟', dictValue: '1' },
          { dictLabel: '经常吸烟', dictValue: '2' }
        ],
        'sys_drinking_status': [
          { dictLabel: '不饮酒', dictValue: '0' },
          { dictLabel: '偶尔饮酒', dictValue: '1' },
          { dictLabel: '经常饮酒', dictValue: '2' }
        ],
        'sys_hobbies': [
          { dictLabel: '旅游', dictValue: '0' },
          { dictLabel: '美食', dictValue: '1' },
          { dictLabel: '运动', dictValue: '2' },
          { dictLabel: '阅读', dictValue: '3' },
          { dictLabel: '电影', dictValue: '4' },
          { dictLabel: '音乐', dictValue: '5' }
        ]
      };
      
      return mockDict[dictType] || [];
    }
  })
}

/**
 * 获取字典标签
 * @param {Array} dictData 字典数据
 * @param {string} value 字典值
 * @returns {string} 字典标签
 */
export function getDictLabel(dictData, value) {
  if (!dictData || dictData.length === 0) {
    return ''
  }
  const dict = dictData.find(item => item.dictValue === value)
  return dict ? dict.dictLabel : ''
}

/**
 * 获取字典值
 * @param {Array} dictData 字典数据
 * @param {string} label 字典标签
 * @returns {string} 字典值
 */
export function getDictValue(dictData, label) {
  if (!dictData || dictData.length === 0) {
    return ''
  }
  const dict = dictData.find(item => item.dictLabel === label)
  return dict ? dict.dictValue : ''
}

/**
 * 清除字典缓存
 * @param {string} dictType 字典类型，不传则清除所有
 */
export function clearDictCache(dictType) {
  if (dictType) {
    delete dictCache[dictType]
  } else {
    Object.keys(dictCache).forEach(key => {
      delete dictCache[key]
    })
  }
}